package solution;

import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

/**
 * <a href="https://www.nowcoder.com/study/live/718/1/16">
 * 第16节 随堂练习-牛牛找工作(有序表)</a>
 *
 * @author or2
 * @Description 为了找到自己满意的工作，牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下，牛牛选择报酬最高的工作。在牛牛选定了自己的工作后，牛牛的小伙伴们来找牛牛帮忙选工作，牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了，于是他只好把这个任务交给了你。
 * @create 2021年09月17日 时间: 9:38
 */
public class NiuniuLooksForAJob {
    public static void main(String[] args) {
//        处理输入
        Scanner scanner = new Scanner(System.in);
        int amountOfWork = scanner.nextInt();
        int allFriends = scanner.nextInt();
//        工作信息
        TreeMap<Integer, Integer> works = new TreeMap<>();
        for (int i = 0; i < amountOfWork; i++) {
            int complexity = scanner.nextInt();
            int pay = scanner.nextInt();
//            过滤工作信息
            if (!works.containsKey(complexity) || pay > works.get(complexity)) {
//                若前一个工作要求少, 工资高, 则不插入该工作
                Map.Entry<Integer, Integer> preWork = works.lowerEntry(complexity);
                if (preWork != null && preWork.getValue() >= pay) {
                    continue;
                }
//                添加本工作
                works.put(complexity, pay);
//                若后面的工作要求高, 工资低, 删除后面的工作
                Map.Entry<Integer, Integer> higherWork = works.higherEntry(complexity);
                while (higherWork != null && higherWork.getValue() <= pay) {
                    works.remove(higherWork.getKey());
                    higherWork = works.higherEntry(complexity);
                }
            }
        }
//        伙伴信息处理
        for (int i = 0; i < allFriends; i++) {
            Map.Entry<Integer, Integer> properWork = works.floorEntry(scanner.nextInt());
            System.out.println(properWork == null ? 0 : properWork.getValue());
        }
    }
}